Techniques for generation, storage, and analysis of execution traces are critical to addressing many complex problems. For example, execution traces can be analyzed to drive automated techniques for locating faults and detecting security vulnerabilities. However, the memory needed to maintain comprehensive trace information (including control flow, value, address, and dependence profiles) can be very large and the time needed to perform dynamic analysis on the traces can be long.
In this talk I will describe a framework for tracing that achieves its scalability via checkpointing/logging based demand-driven collection of relevant traces and a highly compacted representation of the collected traces. Using this framweork we have developed a practical dynamic slicing algorithm. I will also show how we have used dynamic slicing to assist in fault location during debugging by effectively narrowing the fault to a small part of the code.